/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.uniceub.fsw.talentos.facade;

import br.uniceub.fsw.arquitetura.persistencia.transacao.Transacao;
import br.uniceub.fsw.arquitetura.servico.exception.NegocioException;
import br.uniceub.fsw.talentos.dao.StatusAgendaDAO;
import br.uniceub.fsw.talentos.vo.StatusAgendaVO;
import br.uniceub.fsw.talentos.bo.StatusAgendaBO;
import br.uniceub.fsw.util.TabelaHtml;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Leonardo Angelos da Costa
 */
public class StatusAgendaFacade {

    private String message;

    /**
     * Value object do tipoHabilidade.
     */
    private StatusAgendaVO statusAgenda;

    /**
     * Objeto de acesso aos dados de tipoHabilidade.
     */
    private StatusAgendaDAO statusAgendaDao;

    /**
     * Objeto da camada de negócio de tipoHabilidade.
     */
    private StatusAgendaBO statusAgendaBo;

    /**
     * Construtor da classe.
     */
    public StatusAgendaFacade() {
        this.statusAgendaDao = new StatusAgendaDAO();
        this.statusAgendaBo = new StatusAgendaBO();
    }

    /**
     * Getter da mensagem de retorno.
     *
     * @return Mensagem de retorno.
     */
    public String getMessage() {
        String retorno = null;
        if(this.message == null || this.message.equals("")) {
            retorno = "&nbsp";
        } else {
            retorno = this.message;
        }
        return retorno;
    }

    /**
     * Setter da mensagem de retorno.
     *
     * @param message Mensagem de retorno.
     */
    public void setMessage(String message) {
        this.message = message;
    }

    public void operacao(HttpServletRequest req, HttpServletResponse resp) {
        String oper = req.getParameter("operacao");

        if(oper != null)
        {
            if (oper.equals("consultar")) {
                this.consultar(req, resp);
            }
            if (oper.equals("incluir")) {
                this.incluir(req, resp);
            }
          if (oper.equals("alterar")) {
                this.alterar(req, resp);
            }

            if (oper.equals("excluir")) {
                this.excluir(req, resp);
            }

            if (oper.equals("confirmar")) {
                this.confirmar(req, resp);
            }

        }
    }

    public StatusAgendaVO getStatusAgenda() {
        return this.statusAgenda;
    }

    /**
     * Seta o tipoHabilidade.
     *
     * @param tipoHabilidade Objeto tipoHabilidade.
     */
    public void setStatusAgenda(StatusAgendaVO statusAgenda) {
        this.statusAgenda = statusAgenda;
    }

    /**
     * Consultar um tipoHabilidade.
     *
     * @param req Requisição web do tipo HTTP.
     * @param resp Resposta da requisição HTTP.
     */
    public void consultar(HttpServletRequest req, HttpServletResponse resp) {
        String idStatusAgendaTmp = req.getParameter("idStatusAgenda");


        Integer idStatusAgenda = null;

        if(idStatusAgendaTmp == null || idStatusAgendaTmp.equals("")) {
            return;
        } else {
            idStatusAgenda = Integer.parseInt(idStatusAgendaTmp);
        }

        this.statusAgenda = statusAgendaDao.consultarPorId(idStatusAgenda);
    }


    public void incluir(HttpServletRequest req, HttpServletResponse resp) {
        String noStatusAgenda = req.getParameter("dsStatusAgenda");
        String stStatus = req.getParameter("stStatus");

        statusAgenda = new StatusAgendaVO();
        statusAgenda.setDsStatusAgenda(noStatusAgenda);
        statusAgenda.setStStatus((stStatus==null?false:true));

        String mensagem = null;

        // Validações da BO
        try {
            statusAgendaBo.validarVOUnico(statusAgenda);
        } catch(NegocioException ex) {
            mensagem = ex.getMessage();
        }

        if(mensagem == null || mensagem.equals("")) {
            try {
                Transacao.iniciar();

                statusAgendaDao.inserir(statusAgenda);

                Transacao.efetivar();

                mensagem = "Status de agenda incluído com sucesso.";
            } catch (Exception ex) {
                Transacao.desfazer();

                mensagem = "Problema na inclusão do status de agenda: " + ex.getMessage();

                statusAgenda = null;
            }
        } else {
            statusAgenda = null;
        }

        this.message = mensagem;
    }

    public void alterar(HttpServletRequest req, HttpServletResponse resp) {
        String idStatusAgenda = req.getParameter("idStatusAgenda");
        String dsStatusAgenda = req.getParameter("dsStatusAgenda");
        String stStatus = req.getParameter("stStatus");

        statusAgenda = new StatusAgendaVO();
        statusAgenda.setIdStatusAgenda(Integer.parseInt(idStatusAgenda));
        statusAgenda.setDsStatusAgenda(dsStatusAgenda);
        statusAgenda.setStStatus((stStatus==null?false:true));

        String mensagem = null;

        // Validações da BO
        try {
            statusAgendaBo.validarAlterarVOUnico(statusAgenda);
        } catch(NegocioException ex) {
            mensagem = ex.getMessage();
        }

        if(mensagem == null || mensagem.equals("")) {
            try {
                Transacao.iniciar();

                statusAgendaDao.alterar(statusAgenda);

                Transacao.efetivar();

                mensagem = "Status de Agenda alterado com sucesso.";
            } catch (Exception ex) {
                Transacao.desfazer();

                mensagem = "Problema na alteração do Status da Agenda: " + ex.getMessage();

                statusAgenda = null;
            }
        } else {
            statusAgenda = null;
        }

        this.message = mensagem;
    }

    public void excluir(HttpServletRequest req, HttpServletResponse resp) {
        String idStatusAgenda = req.getParameter("idStatusAgenda");

        statusAgenda = new StatusAgendaVO();
        statusAgenda.setIdStatusAgenda(Integer.parseInt(idStatusAgenda));

        String mensagem = null;

        /*
        // Validações da BO
        try {

            statusAgendaBo.validarExclusao(statusAgenda);


        } catch(NegocioException ex) {
            mensagem = ex.getMessage();
        }
             * */

        if(mensagem == null || mensagem.equals("")) {
            try {
                Transacao.iniciar();

                statusAgendaDao.excluir(statusAgenda);

                Transacao.efetivar();

                mensagem = "Status de Agenda excluído com sucesso.";
            } catch (Exception ex) {
                Transacao.desfazer();

                mensagem = "Problema na exclusão do Status da Agenda: " + ex.getMessage();
            }
        } else {
            statusAgenda = null;
        }

        this.message = mensagem;
    }

    public void confirmar(HttpServletRequest req, HttpServletResponse resp) {
        String idStatusAgenda = req.getParameter("idStatusAgenda");
        String dsStatusAgenda = req.getParameter("dsStatusAgenda");
        String stStatus = req.getParameter("stStatus");

        statusAgenda = new StatusAgendaVO();
        statusAgenda.setIdStatusAgenda(Integer.parseInt(idStatusAgenda));
        statusAgenda.setDsStatusAgenda(dsStatusAgenda);
        statusAgenda.setStStatus((stStatus==null?false:true));
    }



    public TabelaHtml consultarStatusAgendas(HttpServletRequest req, HttpServletResponse resp) {
        String nome = req.getParameter("dsStatusAgenda");

        if(nome != null && !nome.equals("")) {
            TabelaHtml tabela = new TabelaHtml();

            tabela.setCampoRetorno("idStatusAgenda");

            tabela.adicionarTitulo("Id");
            tabela.adicionarTamanho(0);
            tabela.adicionarTipo("Integer");
            tabela.adicionarStatus(false);

            tabela.adicionarTitulo("Nome");
            tabela.adicionarTamanho(80);
            tabela.adicionarTipo("String");
            tabela.adicionarStatus(true);

            tabela.gravarCampos();

            StatusAgendaVO exemplo = new StatusAgendaVO();

            exemplo.setDsStatusAgenda(nome);

            // Lista de tipoHabilidades
            List<StatusAgendaVO> statusAgendas = statusAgendaDao.consultarPorExemplo(exemplo);

            // Adiciona os valores de cada tipoHabilidade nas listas de ids e nomes
            for(int i = 0; i < statusAgendas.size(); i++) {
                tabela.adicionarRegistro(converterVoParaString(statusAgendas.get(i)));
            }

            return tabela;
        }

        return null;
    }

    /**
     * Transforma os campos de um VO em uma lista de Strings
     *
     * @return lista de strings com os valores em ordem
     */
    public List<String> converterVoParaString(StatusAgendaVO statusAgenda) {
        List<String> valores = new ArrayList<String>();

        valores.add(statusAgenda.getIdStatusAgenda().toString());
        valores.add(statusAgenda.getDsStatusAgenda());
        valores.add(statusAgenda.getStStatus().toString());

        return valores;
    }






}
